<?php
namespace Sfsn\Core\Controller;

use Sfsn\Core\Config;
use Sfsn\Lib\Xml;
use Sfsn\Lib\Json;

class Controller
{

    /**
     * 变量赋值
     *
     * @param unknown $var            
     */
    protected function assign($key, $value = null)
    {
        if (is_null($value)) {
            $var = (array) $key;
        } else {
            $var = [
                $key => $value
            ];
        }
        view($var, '', false, false);
    }

    /**
     * 输出内容
     *
     * @param unknown $var            
     * @param string $template            
     */
    protected function display($template = '')
    {
        view([], $template);
    }

    /**
     * 返回内容
     *
     * @param unknown $var            
     * @param string $template            
     */
    protected function fetch($var, $template = '')
    {
        return view($var, $template, true);
    }

    /**
     * 直接跳转
     *
     * @param unknown_type $url            
     * @param unknown_type $code            
     */
    protected function redirect($url, $param = [], $author = '', $code = 302)
    {
        // 验证是否是绝对地址如http://baidu.com,如果不是则进行处理
        $url = $this->_validateUrl($url, $param, $author);
        // 跳转
        header('location:' . $url, true, $code);
        exit();
    }

    /**
     * Ajax方式返回数据到客户端
     *
     * @access public
     * @param mixed $data
     *            要返回的数据
     * @param String $type
     *            AJAX返回数据格式
     * @return void
     */
    public function ajaxReturn($data, $type = '', $exit = 1)
    {
        if (empty($type))
            $type = 'JSON';
        switch (strtoupper($type)) {
            case 'JSON':
                // 返回JSON数据格式到客户端 包含状态信息
                $data = str_urlencode($data);
                if ($exit) {
                    header('Content-Type:application/json; charset=utf-8');
                    exit(Json::encode($data));
                } else {
                    return Json::encode($data);
                }
            case 'XML':
                // 返回xml格式数据
                if ($exit) {
                    header('Content-Type:text/xml; charset=utf-8');
                    exit(Xml::toxml($data));
                } else {
                    return Xml::toxml($data);
                }
            default:
                // 返回可执行的js脚本
                if ($exit) {
                    header('Content-Type:text/html; charset=utf-8');
                    exit($data);
                } else {
                    return $data;
                }
        }
    }

    /**
     * 操作错误跳转的快捷方法
     *
     * @access public
     * @param string $message
     *            错误信息
     * @param string $jumpUrl
     *            页面跳转地址
     * @param int $wait
     *            等待时间
     * @return void
     */
    public function error($message, $url = '', $param = [], $author = '', $wait = 3, $exit = true)
    {
        $config = Config::get('APP');
        // 验证是否是绝对地址如http://baidu.com,如果不是则进行处理
        $url = $this->_validateUrl($url, $param, $author);
        // 如果手工设置了跳转页面则执行跳转
        $url && header("refresh:$wait;url=$url");
        // 模板处理
        $errorTpl = $config['TPL_ACTION_ERROR'];
        if ($errorTpl) {
            $var = [
                'message' => $message,
                'url' => $url,
                'wait' => $wait
            ];
            $this->display($var, $errorTpl);
        } else {
            
            include SFSN_PATH . 'Core/Tpl/Error.php';
        }
        // 如果开启终止则终止程序
        $exit && exit();
    }

    /**
     * 操作成功跳转的快捷方法
     *
     * @access public
     * @param string $message
     *            提示信息
     * @param string $jumpUrl
     *            页面跳转地址
     * @param int $wait
     *            等待时间
     * @return void
     */
    public function success($message, $url = '', $param = [], $author = '', $wait = 1, $exit = false)
    {
        $config = Config::get('APP');
        // 验证是否是绝对地址如http://baidu.com,如果不是则进行处理
        $url = $this->_validateUrl($url, $param, $author);
        // 如果手工设置了跳转页面则执行跳转
        $url && header("refresh:$wait;url=$url");
        // 模板处理
        $successTpl = $config['TPL_ACTION_SUCCESS'];
        if ($successTpl) {
            $var = [
                'message' => $message,
                'url' => $url,
                'wait' => $wait
            ];
            $this->display($var, $successTpl);
        } else {
            include SFSN_PATH . 'Core/Tpl/Success.php';
        }
        // 如果开启终止则终止程序
        $exit && exit();
    }

    private function _validateUrl($url = '', $param, $author)
    {
        if (empty($url))
            return '';
            // 验证是否是绝对地址如http://baidu.com
        $tureUrl = filter_var($url, FILTER_VALIDATE_URL);
        // 如果不是url则调用框架url函数处理
        if (! $tureUrl) {
            $url = url($url, $param, $author);
        }
        return $url;
    }
}

?>